package cn.demoncat.util.word.entity;

import cn.demoncat.util.lang.constant.StatusConstant;
import cn.demoncat.util.word.constant.WordGenConstant;

import java.util.ArrayList;
import java.util.List;

/**
 * Word文档 - 内容 - 表格
 *
 * @author 延晓磊
 * @since 2021年04月12日
 */
public class WordTable {

    /**
     * 表头
     */
    private List<WordTableHeader> headers;
    /**
     * 数据：Map或Object，key映射header.field
     */
    private List<Object> datas;
    /**
     * 是否展示表头：1是，0否，null是
     */
    private String headerStatus;
    /**
     * 单元格偏移：[上，左，下，右]
     */
    private Integer[] cellMargins = WordGenConstant.ContentType.Table.CELL_MARGIN;


    /**
     * 行数
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public int rowSize(){
        return colSize() == 0 ? 0 : StatusConstant.Common.isNo(headerStatus) ? dataSize() : dataSize() + 1;
    }

    /**
     * 列数
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public int colSize(){
        return headers == null ? 0 : headers.size();
    }

    /**
     * 数据数
     *
     * @return
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public int dataSize(){
        return datas == null ? 0 : datas.size();
    }

    /**
     * 添加表头
     *
     * @param field
     * @param title
     * @param width
     *
     * @return 表头
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordTableHeader addHeader(String field, String title, Integer width) {
        if (this.headers == null) {
            this.setHeaders(new ArrayList<>());
        }
        WordTableHeader header = new WordTableHeader();
        header.setField(field);
        header.setTitle(title);
        header.setWidth(width);
        this.headers.add(header);
        return header;
    }

    /**
     * 添加数据
     *
     * @param data
     *
     * @return 当前表格
     *
     * @author 延晓磊
     * @since 2021年04月12日
     */
    public WordTable addData(Object data){
        if (this.datas == null) {
            this.setDatas(new ArrayList<>());
        }
        this.datas.add(data);
        return this;
    }

    public List<WordTableHeader> getHeaders() {
        return headers;
    }

    public void setHeaders(List<WordTableHeader> headers) {
        this.headers = headers;
    }

    public String getHeaderStatus() {
        return headerStatus;
    }

    public void setHeaderStatus(String headerStatus) {
        this.headerStatus = headerStatus;
    }

    public List<Object> getDatas() {
        return datas;
    }

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }

    public Integer[] getCellMargins() {
        return cellMargins;
    }

    public void setCellMargins(Integer[] cellMargins) {
        this.cellMargins = cellMargins;
    }
}
